package maven;

import java.io.File;

public class CleanMaven {
	public static void main(String[] args) {
		// args[0] = "E:\\CCS\\repository";
		// if(args.length != 1){
		// print("使用方法错误，方法需要一个参数，参数为mvn本地仓库的路径");
		// }
		findAndDeleteMvn2(new File("D:\\dependency\\repository"));
		// findAndDeleteSVN(new File("D:\\work-qh\\tywyk"));
	}

	/**
	 * 遍历所有文件,根据文件类型区分操作
	 * @param file
	 * @return
	 */
	public static boolean findAndDeleteMvn(File file) {
		if (!file.exists()) {

		} else if (file.isFile()) {
			if (file.getName().endsWith(".lastUpdated")) {
				deleteFile(file.getParentFile());
				return true;
			}
		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			boolean jarFlag = false;
			boolean lastUpdatedFlag = false;
			for (File f : files) {
				if (f.isFile() && f.getName().endsWith(".lastUpdated")) {
					lastUpdatedFlag = true;
					deleteFile(f);
				} else if (f.isFile() && f.getName().endsWith(".jar")) {
					jarFlag = true;
				} else if (f.isDirectory()){
					findAndDeleteMvn(f);
				}
			}
			if (lastUpdatedFlag && !jarFlag) {
				deleteFile(files[0].getParentFile());
				print("删除文件夹:" + file.getAbsolutePath());
				print("====================================");
				file.delete();
			}
		}
		return false;
	}

	/**
	 * 只删 .lastUpdated 文件
	 * @param file
	 * @return
	 */
	public static boolean findAndDeleteMvn2(File file) {
		if (!file.exists()) {

		} else if (file.isFile()) {
			if (file.getName().endsWith(".lastUpdated")) {
				deleteFile(file);
				return true;
			}
		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				findAndDeleteMvn2(f);
			}
		}
		return false;
	}

	public static boolean findAndDeleteSVN(File file) {
		if (!file.exists()) {

		} else if (file.isDirectory()) {
			if (file.getName().equals("node_modules")) {
				// 此目录不处理，需要打断递归
				return false;
			} else if (file.getName().endsWith(".svn")) {
				deleteFile(file);
			} else {
				File[] files = file.listFiles();
				for (File f : files) {
					if (!findAndDeleteSVN(f)) {
						break;
					}
				}
			}
		}
		return true;
	}

	public static boolean findAndDeleteGIT(File file) {
		if (!file.exists()) {

		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			if (file.getName().endsWith(".git")) {
				deleteFile(file);
			} else {
				for (File f : files) {
					if (findAndDeleteGIT(f)) {
						break;
					}
				}
			}
		}
		return false;
	}

	/**
	 * 文件删除操作
	 * @param file
	 */
	public static void deleteFile(File file) {
		if (!file.exists()) {
			throw new RuntimeException("文件不存在：" + file.getName());
		}
		if (file.isFile()) {
			print("删除文件:" + file.getAbsolutePath());
			file.delete();
		} else if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				deleteFile(f);
			}
			print("删除文件夹:" + file.getAbsolutePath());
			print("====================================");
			file.delete();
		}
	}

	public static void print(String msg) {
		System.out.println(msg);
	}
}